﻿using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using EHSubmit.Util;
using EHSubmit.Model;


namespace EHSubmit.Logic.Services
{
    /// <summary>
    /// 提供用户登录服务
    /// </summary>
    public class UserLoginProvider
    {
        public UserLoginProvider()
        {
        }

        /// <summary>
        /// 用户验证,验证成功则返回该用户,否则返回空
        /// </summary>
        /// <param name="user">待验证的用户</param>
        /// <returns>验证后的用户对象</returns>
        public User Check(User user)
        {
            UserManager um = new UserManager();

            User local = um.GetUser(user.ID, WebHelper.GetMD5(user.Pwd));

            if (local == null)   // 本地验证失败
            {
                // 远程代理,通过教务管理系统进行验证
                IRemoteUserProxy rup = RemoteProxyFactory.GetUserProxy();
                User remote = rup.Check(user.ID, user.Pwd, user.RoleId);

                // 远程验证失败
                if (remote == null)
                {
                    return null;
                }
                else  // 验证成功
                {
                    //--- 用户信息存入本地数据库
                    remote.Pwd = WebHelper.GetMD5(user.Pwd);     // 对密码进行本地加密
                    remote.RoleId = user.RoleId;
                    
                    um.AddOrUpdateUserFromRemote(remote);
                    
                    // 再次从数据库中取出当前ID的用户,主要是因为如果该用户已存在只是
                    // 密码在教务处有所变更,这里只需更新密码,但本地用户信息可能更丰富
                    return um.GetUser(remote.ID);
                }

            }
            else  // 本地验证成功
            {
                return local;
            }
        }



    }
}